import { useState } from "react";
import { useMutation } from "convex/react";

/**
 * 自定义 Hook 用于管理 API 的 mutation 操作，并处理加载状态。
 *
 * @param {Function} mutationFunction - 传递给 `useMutation` 的 mutation 函数。
 * @returns {{
 *   pedding: boolean,       // 表示 mutation 操作是否正在进行中。
 *   mutate: (payload: any) => Promise<any> // 触发 mutation 操作的函数，接受提供的 payload 参数。
 * }} 包含加载状态和 mutate 函数的对象。
 */
export const useApiMutation = (mutationFunction: any) => {
  const [pedding, setPedding] = useState(false);
  // 返回一个新的函数 apiMutation 可接受参数
  const apiMutation = useMutation(mutationFunction);

  const mutate = (payload: any) => {
    setPedding(true);
    return apiMutation(payload)
      .finally(() => setPedding(false))
      .then((result) => {
        return result;
      })
      .catch((error) => {
        throw error;
      });
  };

  return {
    pedding,
    mutate,
  };
};
